home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / ImportPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-26  |  7KB  |  354 lines

  1. /*
  2. **    ImportPanel.c
  3. **
  4. **    Editing panel for phone unit settings
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIST=1,GAD_REPLACE,GAD_APPEND,GAD_CANCEL };
  13.  
  14.     /* ListViewRender():
  15.      *
  16.      *    This callback routine is responsible for rendering
  17.      *    the single listview entries.
  18.      */
  19.  
  20. STATIC ULONG __saveds __asm
  21. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct Node *Node)
  22. {
  23.         /* We only know how to redraw lines. */
  24.  
  25.     if(Msg -> lvdm_MethodID == LV_DRAW)
  26.     {
  27.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  28.         LONG         Left    = Msg -> lvdm_Bounds . MinX,
  29.                  Top    = Msg -> lvdm_Bounds . MinY,
  30.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  31.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  32.                  FgPen,BgPen,
  33.                  Len,LabelLen;
  34.         STRPTR         String;
  35.  
  36.         String = &Node -> ln_Name[6];
  37.  
  38.             /* Determine the rendering pens. */
  39.  
  40.         switch(Msg -> lvdm_State)
  41.         {
  42.             case LVR_SELECTEDDISABLED:
  43.             case LVR_NORMALDISABLED:
  44.             case LVR_NORMAL:
  45.  
  46.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  47.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  48.                 break;
  49.  
  50.             case LVR_SELECTED:
  51.  
  52.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  53.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  54.                 break;
  55.         }
  56.  
  57.         SetAPen(RPort,BgPen);
  58.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  59.  
  60.         Left    += 2;
  61.         Width    -= 2;
  62.  
  63.             /* Set the rendering pens. */
  64.  
  65.         SetDrMd(RPort,JAM2);
  66.         SetAPen(RPort,FgPen);
  67.         SetBPen(RPort,BgPen);
  68.  
  69.             /* Determine length of vanilla name. */
  70.  
  71.         LabelLen = strlen(String);
  72.  
  73.             /* Try to make it fit. */
  74.  
  75.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  76.             LabelLen--;
  77.  
  78.             /* Print the vanilla name if possible. */
  79.  
  80.         if(LabelLen)
  81.         {
  82.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  83.             Text(RPort,String,LabelLen);
  84.  
  85.             Left    += Len;
  86.             Width    -= Len;
  87.         }
  88.  
  89.             /* Fill the area to follow the vanilla name. */
  90.  
  91.         if(Width > 0)
  92.         {
  93.             SetAPen(RPort,BgPen);
  94.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  95.         }
  96.  
  97.             /* If the item happens to be disabled, draw the cross-hatch
  98.              * pattern across it.
  99.              */
  100.  
  101.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  102.         {
  103.             SetDrMd(RPort,JAM1);
  104.  
  105.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  106.  
  107.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  108.  
  109.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  110.  
  111.             SetAfPt(RPort,NULL,0);
  112.         }
  113.  
  114.         return(LVCB_OK);
  115.     }
  116.     else
  117.         return(LVCB_UNKNOWN);
  118. }
  119.  
  120. BYTE __regargs
  121. ImportPanel(struct PhoneEntry *Entry,struct List *PhoneList,struct List *TimeDateList)
  122. {
  123.     struct LayoutHandle    *Handle;
  124.     BYTE             MadeChanges = FALSE;
  125.  
  126.     if(!TimeDateList)
  127.         TimeDateList = (struct List *)&Entry -> TimeDateList;
  128.  
  129.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  130.         LH_LocaleHook,    &LocaleHook,
  131.     TAG_DONE))
  132.     {
  133.         struct Window *PanelWindow;
  134.  
  135.         LT_New(Handle,
  136.             LA_Type,    VERTICAL_KIND,
  137.         TAG_DONE);
  138.         {
  139.             LT_New(Handle,
  140.                 LA_Type,    VERTICAL_KIND,
  141. //                LA_LabelID,    MSG_V36_0088,
  142.             TAG_DONE);
  143.             {
  144.                 STATIC struct Hook ListViewHook =
  145.                 {
  146.                     {NULL},
  147.                     (HOOKFUNC)ListViewRender
  148.                 };
  149.  
  150.                 LONG i,Index = -1,MaxHeight;
  151.  
  152.                 for(i = 0 ; i < NumPhoneEntries ; i++)
  153.                 {
  154.                     if(Entry == Phonebook[i])
  155.                     {
  156.                         Index = i;
  157.  
  158.                         break;
  159.                     }
  160.                 }
  161.  
  162.                 if(NumPhoneEntries < 10)
  163.                     MaxHeight = 10;
  164.                 else
  165.                 {
  166.                     if(NumPhoneEntries > 20)
  167.                         MaxHeight = 20;
  168.                     else
  169.                         MaxHeight = NumPhoneEntries;
  170.                 }
  171.  
  172.                 LT_New(Handle,
  173.                     LA_Type,    LISTVIEW_KIND,
  174. //                    LA_LabelID,    MSG_GLOBAL_NAME_LIST_GAD,
  175.                     LA_LabelID,    MSG_V36_0088,
  176.                     LA_ID,        GAD_LIST,
  177.                     LA_Chars,    50,
  178.                     LA_Lines,    10,
  179.                     LALV_Link,    NIL_LINK,
  180.                     LALV_CursorKey,    TRUE,
  181.                     LALV_MaxGrowY,    MaxHeight,
  182.                     LALV_ResizeY,    TRUE,
  183.                     GTLV_Selected,    Index,
  184.                     GTLV_CallBack,    &ListViewHook,
  185.                     GTLV_Labels,    PhoneList,
  186.                 TAG_DONE);
  187.  
  188.                 LT_EndGroup(Handle);
  189.             }
  190.  
  191.             LT_New(Handle,
  192.                 LA_Type,VERTICAL_KIND,
  193.             TAG_DONE);
  194.             {
  195.                 LT_New(Handle,
  196.                     LA_Type,    XBAR_KIND,
  197.                     LAXB_FullSize,    TRUE,
  198.                 TAG_DONE);
  199.  
  200.                 LT_EndGroup(Handle);
  201.             }
  202.  
  203.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  204.                 LAGR_Spread,    TRUE,
  205.             TAG_DONE);
  206.             {
  207.                 LT_New(Handle,
  208.                     LA_Type,    BUTTON_KIND,
  209.                     LA_LabelID,    MSG_IMPORTPANEL_REPLACE_RATES_GAD,
  210.                     LA_ID,        GAD_REPLACE,
  211.                     GA_Disabled,    TRUE,
  212.                     LABT_ExtraFat,    TRUE,
  213.                 TAG_DONE);
  214.  
  215.                 LT_New(Handle,
  216.                     LA_Type,    BUTTON_KIND,
  217.                     LA_LabelID,    MSG_IMPORTPANEL_APPEND_RATES_GAD,
  218.                     LA_ID,        GAD_APPEND,
  219.                     GA_Disabled,    TRUE,
  220.                     LABT_ExtraFat,    TRUE,
  221.                 TAG_DONE);
  222.  
  223.                 LT_New(Handle,
  224.                     LA_Type,    BUTTON_KIND,
  225.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  226.                     LA_ID,        GAD_CANCEL,
  227.                     LABT_EscKey,    TRUE,
  228.                     LABT_ExtraFat,    TRUE,
  229.                 TAG_DONE);
  230.  
  231.                 LT_EndGroup(Handle);
  232.             }
  233.  
  234.             LT_EndGroup(Handle);
  235.         }
  236.  
  237.         if(PanelWindow = LT_Build(Handle,
  238.             LAWN_TitleID,        MSG_IMPORTPANEL_IMPORT_RATES_TXT,
  239.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  240.             LAWN_HelpHook,        &GuideHook,
  241.             LAWN_Parent,        Window,
  242.             WA_DepthGadget,        TRUE,
  243.             WA_CloseGadget,        TRUE,
  244.             WA_DragBar,        TRUE,
  245.             WA_RMBTrap,        TRUE,
  246.             WA_Activate,        TRUE,
  247.             WA_SimpleRefresh,    TRUE,
  248.         TAG_DONE))
  249.         {
  250.             struct IntuiMessage    *Message;
  251.             BOOLEAN             Done = FALSE;
  252.             ULONG             MsgClass;
  253.             UWORD             MsgCode;
  254.             struct Gadget        *MsgGadget;
  255.             LONG             Selected = ~0;
  256.  
  257.             GuideContext(CONTEXT_IMPORT);
  258.  
  259.             LT_ShowWindow(Handle,TRUE);
  260.  
  261.             PushWindow(PanelWindow);
  262.  
  263.             do
  264.             {
  265.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  266.                     break;
  267.  
  268.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  269.                 {
  270.                     MsgClass    = Message -> Class;
  271.                     MsgCode        = Message -> Code;
  272.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  273.  
  274.                     LT_ReplyIMsg(Message);
  275.  
  276.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  277.                         Done = TRUE;
  278.  
  279.                     if(MsgClass == IDCMP_GADGETUP)
  280.                     {
  281.                         switch(MsgGadget -> GadgetID)
  282.                         {
  283.                             case GAD_LIST:
  284.  
  285.                                 if(Entry != Phonebook[MsgCode])
  286.                                 {
  287.                                     if(Selected == ~0)
  288.                                     {
  289.                                         LT_SetAttributes(Handle,GAD_REPLACE,
  290.                                             GA_Disabled,    FALSE,
  291.                                         TAG_DONE);
  292.  
  293.                                         LT_SetAttributes(Handle,GAD_APPEND,
  294.                                             GA_Disabled,    FALSE,
  295.                                         TAG_DONE);
  296.                                     }
  297.  
  298.                                     Selected = MsgCode;
  299.                                 }
  300.                                 else
  301.                                 {
  302.                                     if(Selected != ~0)
  303.                                     {
  304.                                         LT_SetAttributes(Handle,GAD_REPLACE,
  305.                                             GA_Disabled,    TRUE,
  306.                                         TAG_DONE);
  307.  
  308.                                         LT_SetAttributes(Handle,GAD_APPEND,
  309.                                             GA_Disabled,    TRUE,
  310.                                         TAG_DONE);
  311.  
  312.                                         Selected = ~0;
  313.                                     }
  314.                                 }
  315.  
  316.                                 break;
  317.  
  318.                             case GAD_APPEND:
  319.  
  320.                                 CopyTimeDateList((struct List *)&Phonebook[Selected] -> TimeDateList,TimeDateList,TRUE);
  321.  
  322.                                 Done = MadeChanges = TRUE;
  323.  
  324.                                 break;
  325.  
  326.                             case GAD_REPLACE:
  327.  
  328.                                 FreeTimeDateList(TimeDateList);
  329.  
  330.                                 CopyTimeDateList((struct List *)&Phonebook[Selected] -> TimeDateList,TimeDateList,FALSE);
  331.  
  332.                                 Done = MadeChanges = TRUE;
  333.  
  334.                                 break;
  335.  
  336.                             case GAD_CANCEL:
  337.  
  338.                                 Done = TRUE;
  339.                                 break;
  340.                         }
  341.                     }
  342.                 }
  343.             }
  344.             while(!Done);
  345.  
  346.             PopWindow();
  347.         }
  348.  
  349.         LT_DeleteHandle(Handle);
  350.     }
  351.  
  352.     return(MadeChanges);
  353. }
  354.